"""
数据库迁移脚本 - 为tasks表添加最低利润率字段
"""
import os
import sys
import sqlite3
from datetime import datetime

# 获取项目根目录
def get_project_root():
    if getattr(sys, 'frozen', False):
        # 如果是打包后的程序
        base_dir = os.path.dirname(sys.executable)
    else:
        # 如果是开发环境
        base_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
    return base_dir

def get_db_path():
    """获取数据库文件路径"""
    base_dir = get_project_root()
    db_dir = os.path.join(base_dir, "data")
    if not os.path.exists(db_dir):
        os.makedirs(db_dir)
    return os.path.join(db_dir, "uudata.db")

def run_migration():
    """执行迁移操作"""
    db_path = get_db_path()
    print(f"数据库路径: {db_path}")
    
    # 检查数据库文件是否存在
    if not os.path.exists(db_path):
        print("数据库文件不存在，请先运行应用程序创建数据库")
        return False
    
    # 连接数据库
    conn = sqlite3.connect(db_path)
    cursor = conn.cursor()
    
    try:
        # 检查tasks表是否存在
        cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='tasks'")
        if not cursor.fetchone():
            print("tasks表不存在，请先运行应用程序创建数据库")
            return False
        
        # 检查min_profit_rate列是否已存在
        cursor.execute("PRAGMA table_info(tasks)")
        columns = cursor.fetchall()
        column_names = [column[1] for column in columns]
        
        if 'min_profit_rate' in column_names:
            print("min_profit_rate列已存在，无需迁移")
            return True
        
        # 添加min_profit_rate列
        print("正在添加min_profit_rate列...")
        cursor.execute("ALTER TABLE tasks ADD COLUMN min_profit_rate REAL DEFAULT 0")
        
        # 提交事务
        conn.commit()
        print(f"迁移成功完成，已添加min_profit_rate列到tasks表")
        return True
    
    except Exception as e:
        # 发生错误时回滚
        conn.rollback()
        print(f"迁移失败: {str(e)}")
        return False
    
    finally:
        # 关闭连接
        cursor.close()
        conn.close()

if __name__ == "__main__":
    print(f"开始执行迁移 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    success = run_migration()
    print(f"迁移{'成功' if success else '失败'} - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
